package org.dromara.community.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.community.entity.AsRegistrationInformation;
import org.dromara.community.mapper.AsRegistrationInformationsMapper;
import org.dromara.community.service.AsRegistrationInformationsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/registrationInformation")
@Tag(name = "报名信息")
public class AsRegistrationInformationsController {


    @Autowired
    private AsRegistrationInformationsService asRegistrationInformationService;

    @Autowired
    private AsRegistrationInformationsMapper asRegistrationInformationMapper;


    @GetMapping("/selectAll")
    @Operation(summary = "查询全部")
    public Page<AsRegistrationInformation> selectAll(AsRegistrationInformation asRegistrationInformation, Pageable pageable) {
        return asRegistrationInformationService.selectAllid(asRegistrationInformation, pageable);
    }


    @PostMapping("/addAsRegis")
    @Operation(summary = "新增报名信息")
/**
 * 新增报名信息
 * 该方法用于接收前端发送的报名信息，并将其保存到数据库中
 *
 * @param asRegistrationInformation 报名信息对象，包含报名的所有详细信息
 * @return 返回一个包含状态和消息的Map，通过Http响应返回给前端
 */
    public ResponseEntity<Map<String, Object>> addAsRegis(@RequestBody AsRegistrationInformation asRegistrationInformation) {
        try {
            // 调用服务层的保存方法，将报名信息保存到数据库
            asRegistrationInformationService.save(asRegistrationInformation);
            // 创建响应的Map，用于返回给前端
            Map<String, Object> response = new HashMap<>();
            response.put("message", "报名信息添加成功");
            response.put("status", HttpStatus.OK.value());
            // 返回报名信息添加成功的状态和消息
            return new ResponseEntity<>(response, HttpStatus.OK);
        } catch (Exception e) {
            // 捕获异常，重新抛出，由全局异常处理器进行处理
            throw e;
        }
    }

    @PostMapping("/updateAsRegis")
    @Operation(summary = "修改报名信息")
/**
 * 修改报名信息
 * 该方法接收一个报名信息对象，尝试更新数据库中的对应记录，并返回一个包含操作结果信息的Map
 *
 * @param asRegistrationInformation 报名信息对象，包含需要更新的报名信息
 * @return ResponseEntity<Map < String, Object>> 包含操作状态和消息的Map对象的响应实体
 */
    public ResponseEntity<Map<String, Object>> updateAsRegis(@RequestBody AsRegistrationInformation asRegistrationInformation) {
        try {
            // 调用服务层方法，根据传入的报名信息对象更新数据库中的记录
            asRegistrationInformationService.updateById(asRegistrationInformation);
            // 创建响应体，包含操作结果信息
            Map<String, Object> response = new HashMap<>();
            response.put("message", "报名信息修改成功");
            response.put("status", HttpStatus.OK.value());
            // 返回响应实体，表示操作成功
            return new ResponseEntity<>(response, HttpStatus.OK);
        } catch (Exception e) {
            // 在发生异常时，将异常向上抛出，由上层处理
            throw e;
        }
    }

    /**
     * 模糊查询报名信息
     *
     * @param name 姓名，可选参数，用于模糊查询
     * @return 报名信息列表，包含所有符合条件的报名记录
     */
    @GetMapping("/seleteAsRegis")
    @Operation(summary = "模糊查询报名信息")
    public List<AsRegistrationInformation> seleteAsRegis(@RequestParam(value = "name", required = false) String name) {
        return asRegistrationInformationService.selectAsRegistrationInformation(name);
    }

}
